package com.edu.common.utils;

import java.math.BigDecimal;  
import java.util.UUID;

import org.apache.commons.lang.RandomStringUtils;  
  
public class NumberUtil {  
  
    private static final int DEF_DIV_SCALE = 2;  
      
    /** 
     * 判断字符串是否为数字 
     * @param num 
     * @return 
     */  
    public static boolean isNumberic(String num){  
        return (null == num || num.length() <= 0 || num.matches("\\d{1,}")) ? true : false;  
    }  
      
    /** 
     * @return 返回12位随机数 
     */  
    public static String randomNumber()  
    {  
        return RandomStringUtils.randomNumeric(12);  
    }  
    /** 
     * @param parm 
     * @return 返回指定位数随机数 
     */  
    public static String randomNumber(int parm)  
    {  
        return RandomStringUtils.randomNumeric(parm);  
    }  
    /** 
     * @return 返回纯数字和字母的GUID 
     */  
    public static String randomUUID()  
    {  
        return UUID.randomUUID().toString().replaceAll("-","");  
    }  
    /** 
     * @param parm 
     * @return 返回指定位数的GUID 
     */  
    public static String randomUUID(int parm)  
    {  
        return UUID.randomUUID().toString().replaceAll("-","").substring(0,parm);  
    }  
  
    /** 
     * * 两个Double数相加 * 
     *  
     * @param v1 * 
     * @param v2 * 
     * @return Double 
     */  
    public static Double add(Double v1, Double v2) {  
        BigDecimal b1 = new BigDecimal(v1.toString());  
        BigDecimal b2 = new BigDecimal(v2.toString());  
        return new Double(b1.add(b2).doubleValue());  
    }  
  
    /** 
     * * 两个Double数相减 * 
     *  
     * @param v1 * 
     * @param v2 * 
     * @return Double 
     */  
    public static Double sub(Double v1, Double v2) {  
        BigDecimal b1 = new BigDecimal(v1.toString());  
        BigDecimal b2 = new BigDecimal(v2.toString());  
        return new Double(b1.subtract(b2).doubleValue());  
    }  
  
    /** 
     * * 两个Double数相乘 * 
     *  
     * @param v1 * 
     * @param v2 * 
     * @return Double 
     */  
    public static Double mul(Double v1, Double v2) {  
        BigDecimal b1 = new BigDecimal(v1.toString());  
        BigDecimal b2 = new BigDecimal(v2.toString());  
        return new Double(b1.multiply(b2).doubleValue());  
    }  
  
    /** 
     * * 两个Double数相除 * 
     *  
     * @param v1 * 
     * @param v2 * 
     * @return Double 
     */  
    public static Double div(Double v1, Double v2) {  
        BigDecimal b1 = new BigDecimal(v1.toString());  
        BigDecimal b2 = new BigDecimal(v2.toString());  
        return new Double(b1  
                .divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)  
                .doubleValue());  
    }  
  
    /** 
     * * 两个Double数相除，并保留scale位小数 * 
     *  
     * @param v1 * 
     * @param v2 * 
     * @param scale * 
     * @return Double 
     */  
    public static Double div(Double v1, Double v2, int scale) {  
        if (scale < 0) {  
            throw new IllegalArgumentException(  
                    "The scale must be a positive integer or zero");  
        }  
        BigDecimal b1 = new BigDecimal(v1.toString());  
        BigDecimal b2 = new BigDecimal(v2.toString());  
        return new Double(b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP)  
                .doubleValue());  
    }  
      
    /** 
     * @param v1 
     * @return 返回指定Double的负数 
     */  
    public static Double neg(Double v1) {  
        return sub(new Double(0),v1);  
    }  
      
}  